<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <p>04这个版本是根据03演化过来的--通过一个函数，可以实现任意两个对象之间的继承</p>

    <script>
        function Gbw() {
            this.car = '兰博基尼';
            this.house = '外滩十八号';
            this.saying = '基尼太美';
        }

        function Father() { }
        Father.prototype.add = 'hnzz';
        Father.prototype.xingShi = 'zheng';


        // 这个函数 可以使child继承parent
        function extend(parent, child) {
            // 无论是Gbw还是Father作为被继承的parent 都要保证自己的prototype上有属性或者方法 不然child就继承了一个空对象
            // 因为这个函数是继承parent的原型对象中的内容 而不是 构造函数中的内容
            // 所以被继承的内容要放在原型对象中而不是构造函数中
            function F() { }
            F.prototype = parent.prototype;
            child.prototype = new F()
            child.prototype.constructor = child; // 纠正指向
        }

        // extend(Gbw, Father); // 调用函数 完成继承
        // var son1 = new Father();
        // console.log(son1);


        extend(Father, Gbw);
        // extend(A, B)
        // extend(A, c)
        // extend(A, d)
        // ....
        // extend(A, z)
        var ggg = new Gbw();
        console.log(ggg);
    </script>
</body>

</html>